﻿//#define _CRT_SECURE_NO_WARNINGS  1
////一定要动手，例子不管多么简单，建议至少自己手敲一遍看看是否理解了里头的细枝末节。
////一定要学会思考，思考为什么要这样，而不是那样。还要举一反三地思考
//#include<string>
//#include<iostream>
//using namespace std;
//class Animal {
//public:
//	
//	//虚函数
//	virtual void speak()
//	{
//		cout << "Animal在说话" << endl;
//	}
//};
//class Cat :public Animal {
//public:
//	//重写概念：函数返回值类型 函数名 函数参数列表 完全相同
//	virtual void speak()
//	{
//		cout << "cat在说话" << endl;
//	}
//};
//class Dog :public Animal {
//public:
//
//	void speak()
//	{
//		cout << "dog在说话" << endl;
//	}
//};
////执行说话的函数
////地址早绑定， 在编译阶段确定函数的地址
////如果想让cat说话，就不能地址早绑定，要在运行期间绑定即，地址晚绑定
//
////动态多态条件：
////有继承关系
////子类要重写父类中的虚函数
//
////动态多态使用：
////父类的指针或引用 指向子类对象
//void dospeak(Animal& animal)
//{
//	animal.speak();
//}
//void test()
//{
//	Cat cat;
//	Dog dog;
//	dospeak(cat);
//	dospeak(dog);
//
//}
//int main()
//{
//	test();
//	return 0;
//}